package com.hua.designpattern.behavioral.memento;

/**
 * 
 * @author joshua
 *
 *         <pre>
 *
 *  备忘录模式（Memento Pattern）在不破坏封装的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态，这样可以在以后将对象恢复到原先保存的状态。
 *	优点： 
 *		1、给用户提供了一种可以恢复状态的机制，可以使用户能够比较方便地回到某个历史的状态。 
 *		2、实现了信息的封装，使得用户不需要关心状态的保存细节。
 *	缺点：消耗资源。如果类的成员变量过多，势必会占用比较大的资源，而且每一次保存都会消耗一定的内存。
 *
 *	保存某个状态的对象，可以选择内存复制 或者 外部化(prototype).
 *
 *         </pre>
 *
 */
public class TestMemento {

	public static void main(String[] args) {
		BaseObject baseObject = new BaseObject();
		MemontoManager memontoManager = new MemontoManager(baseObject);
		baseObject.setName("value1");
		baseObject.setName("value2");
		memontoManager.saveToMemonto(baseObject);
		baseObject.setName("value3");
		baseObject.setName("value4");
		memontoManager.saveToMemonto(baseObject);
		baseObject.setName("value5");

		System.out.println(baseObject);
		System.out.println(memontoManager.getFromMemonto(1));
		System.out.println(memontoManager.getFromMemonto(2));
		System.out.println(memontoManager.getFromMemonto(3));

	}

}
